package com.dahua.appendix.version2;

/**
 * 抽象的动物类
 * @author sunhongguang
 * @create 2022-01-05-22:50
 */
public abstract class Animal {

    /**
     * 每个动物都会有名字
     */
    protected String animalName;
    /**
     * 每个动物都会叫，默认叫的次数为5次，具体的子类实现（具体的动物）可以修改叫的次数
     */
    protected int shoutNum = 5;

    public Animal() {
        this.animalName = "无名";
    }

    public Animal(String name) {
        this.animalName = name;
    }

    public String getAnimalName() {
        return animalName;
    }

    public void setAnimalName(String animalName) {
        this.animalName = animalName;
    }

    public int getShoutNum() {
        return shoutNum;
    }

    public void setShoutNum(int shoutNum) {
        if (shoutNum <= 10) {
            this.shoutNum = shoutNum;
        } else {
            this.shoutNum = 10;
        }
    }

    /**
     * 各种动物的叫声不一样，需要子类继承Animal这个父类，自己去实现如何叫
     * @return  动物叫声的形式
     */
    protected abstract String getShoutSound();

    /**
     * 各种动物都会叫，所以定义一个公共的叫声方法放在父类Animal类中，但是具体的叫声形式由不同的子类自己去实现抽象方法getShoutSound()
     * @return
     */
    public String shout() {
        String result = "";
        for (int i = 0; i < shoutNum; i++) {
            result += getShoutSound()+" ";
        }
        return "我的名字叫" + animalName + " " + result;
    }
}
